/*
运行使用：RUST_BACKTRACE=1 cargo run
trait 告诉 Rust 编译器某个特定类型拥有可能与其他类型共享的功能。
注意：trait 类似于其他语言中常被称为 接口（interfaces）的功能，虽然有一些不同。
c++ 称为模板
*/
fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
    let mut largest = list[0];

    for &item in list.iter() {
        if item > largest {
            largest = item;
        }
    }

    largest
}

fn main() {
    let number_list = vec![34, 50, 25, 100, 65];

    let result = largest(&number_list);
    println!("The largest number is {}", result);

    let char_list = vec!['y', 'm', 'a', 'q'];

    let result = largest(&char_list);
    println!("The largest char is {}", result);
}

// fn type_str<T>(_val: &T) -> & 'static str {
//     std::any::type_name::<T>()
// }
